package org.yelongframework.model.support.mybatis.mapper;

import org.yelongframework.core.sql.param.SqlParam;
import org.yelongframework.lang.Nullable;
import org.yelongframework.model.support.mybatis.sql.MybatisParamMap;
import org.yelongframework.mybatis.mapper.GenericMapperParam;

/**
 * 通用注解映射参数构建器。将原生SQL(select * from USER where username like
 * ?)转换为mybatis使用的sql(select * from USER where username like #{username})
 * 并将参数一并封装到map中。 Mapper映射器中的参数仅传入一个Map。且sql语句为${sql}进行声明即可
 * 
 * @since 1.0.0
 */
public interface GenericMapperParamBuilder {

	// ==================================================根据数组构建参数==================================================

	/**
	 * 构建参数
	 * 
	 * @param sql    SQL
	 * @param params 参数
	 * @return SQL、以及SQL的参数映射
	 */
	GenericMapperParam build(String sql, @Nullable Object[] params);

	// ==================================================根据Mybatis参数构建参数==================================================

	/**
	 * 构建参数
	 * 
	 * @param sql             SQL语句
	 * @param mybatisParamMap 参数值
	 * @return 参数映射
	 */
	GenericMapperParam build(String sql, @Nullable MybatisParamMap mybatisParamMap);

	// ==================================================根据Sql参数构建参数==================================================

	/**
	 * 构建参数
	 * 
	 * @param sql      SQL语句
	 * @param sqlParam SQL参数
	 * @return 参数映射
	 */
	GenericMapperParam build(String sql, @Nullable SqlParam sqlParam);

}
